package lib

//link to 188
func init() {
	Probs = append(Probs, Problem{
		Num:         123,
		Discription: "最多2笔股票买卖最大收益",
		Level:       2,
		Labels: map[string]int{
			"动态规划":  1,
			"有限状态机": 1,
		},
	})
}

func MaxProfit3(prices []int) int {
	//当前区间范围内的第一笔交易的最低买点
	buy1 := -prices[0]
	//当前区间范围内第一笔交易的最高利润
	profit1 := 0
	//当前区间内，包含第一笔交易内的第二笔交易的成本
	buy2 := -prices[0]
	//当前区间内两笔交易的最大收益
	profit2 := 0
	for i := 1; i < len(prices); i++ {
		buy1 = max(buy1, -prices[i])
		profit1 = max(profit1, buy1+prices[i])
		//如果选的是之前的buy2，也是在buy2之前某一个位置进行第一次卖出的
		buy2 = max(buy2, profit1-prices[i])
		profit2 = max(profit2, prices[i]+buy2)
	}

	return profit2
}
